當前位置:首頁 » 編程語言 » c語言做指針代碼
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言做指針代碼

發布時間: 2022-06-01 02:07:37

c語言中指針怎麼使用

1、使用場景

使用指針時,必須將它指向一個變數的地址或者為它分配空間方能使用,如下所示:

#include<stdio.h>

#include <stdlib.h>

int main(int argc, char const *argv[])

{

int a[5]={0,1,2,3,4};

int *b,*d;

int c=2;

int *e=a; //e指向a數組首地址

//*b=2; 無法直接初始化

//printf("%d ", *b);

e=e+2; //移動兩個地址單元

d=&c; //d指向c的地址來表示值

c=4; //修改原c變數的值,d指針的值會發生改變

b=(int *)malloc(sizeof(int));//為b分配一個int型空間來直接存儲

*b=2;//分配空間後可以直接賦值了

printf("this is e,b,c,d :%d %d %d %d ",*e,*b,c,*d);

2、類型說明

(1)int *a :表示一個指向int型變數的指針,指向的是變數的地址單元

(2)char *b:表示一個指向char變數的指針

*a表示的是這個指針指向地址的值,a為此指針本身的地址,這點要明確,一般用*(a+1)、*(a+2)來表示值,如:

int nums[5]={0,1,2,3,4};

int *a=nums;

printf("%d %d %p ",*a,*(a+1),a);

(1)c語言做指針代碼擴展閱讀:

指針的運算

指針指向變數地址,若原變數的內容發生了變化,它本身也會發生變化,指針之間的運算一般為值運算和地址運算

(1)值運算:直接通過*運算方式,像a+*(a+1),結果為第一個元素與第二個元素相加。

int nums[5]={0,1,2,3,4};

int *a=nums;

(2)地址運算:通過a+i的方式.指針會指向a的下i個地址。

int nums[5]={0,1,2,3,4};

int *a=nums;

a=a+2;

printf("%d ",*a);

結果輸出2。

參考資料來源 :指針-網路

⑵ c語言如何將代碼從數組寫的方法改成指針來寫

double *a;
int m,n,i;
printf("請輸入矩陣有幾行:");
scanf("%d",m);
printf("請輸入矩陣有幾列:");
scanf("%d",n);
a=(double *)malloc(m*n*sizeof(double)); //加在這里就OK了
for (i=0;i<m*n;i++)
scanf("%lf",&a[i]);

⑶ 關於C語言中的指針學習

printf("%d\n",(*pointer_1)++); //先輸出(*pointer_1)的值100,之後,再對(*pointer_1)即a做自增運算,a的值變為101。
printf("%d\n",*pointer_1++); //先輸出*pointer_1的值101,之後,再對pointer_1做自增運算,pointer_1指向內存中變數a的下一個內存空間!因為此句比上句少一括弧,故自增的對象不同。
printf("%d\n",*pointer_1); //輸出pointer_1指向的空間的值。但a之後內存值不確定!

*pointer_1++ //先計算*pointer_1,再計算pointer_1++
(*pointer_1)++ //先計算*pointer_1,再對pointer_1指向的變數進行++
*(pointer_1++) //同第一個,先計算*pointer_1,再計算pointer_1++

⑷ c語言指針詳解

指針是一個特殊的變數,它裡面存儲的數值被解釋成為內存里的一個地址。數據在內存中的地址也稱為指針,如果一個變數存儲了一份數據的指針,我們就稱它為指針變數。

計算機中所有的數據都必須放在內存中,不同類型的數據佔用的位元組數不一樣,例如 int 佔用 4 個位元組,char 佔用 1 個位元組。

為了正確地訪問這些數據,必須為每個位元組都編上號碼,就像門牌號、身份證號一樣,每個位元組的編號是唯一的,根據編號可以准確地找到某個位元組。

C語言用變數來存儲數據,用函數來定義一段可以重復使用的代碼,它們最終都要放到內存中才能供 CPU 使用。數據和代碼都以二進制的形式存儲在內存中,計算機無法從格式上區分某塊內存到底存儲的是數據還是代碼。

當程序被載入到內存後,操作系統會給不同的內存塊指定不同的許可權,擁有讀取和執行許可權的內存塊就是代碼,而擁有讀取和寫入許可權(也可能只有讀取許可權)的內存塊就是數據。

CPU 只能通過地址來取得內存中的代碼和數據,程序在執行過程中會告知 CPU 要執行的代碼以及要讀寫的數據的地址。

如果程序不小心出錯,或者開發者有意為之,在 CPU 要寫入數據時給它一個代碼區域的地址,就會發生內存訪問錯誤。這種內存訪問錯誤會被硬體和操作系統攔截,強製程序崩潰,程序員沒有挽救的機會。

變數名和函數名為我們提供了方便,讓我們在編寫代碼的過程中可以使用易於閱讀和理解的英文字元串,不用直接面對二進制地址,那場景簡直讓人崩潰。

需要注意的是,雖然變數名、函數名、字元串名和數組名在本質上是一樣的,它們都是地址的助記符,但在編寫代碼的過程中,我們認為變數名表示的是數據本身,而函數名、字元串名和數組名表示的是代碼塊或數據塊的首地址。

(4)c語言做指針代碼擴展閱讀

指針使用(* 和 &

*&a可以理解為*(&a),&a表示取變數 a 的地址(等價於 pa),*(&a)表示取這個地址上的數據(等價於 *pa),繞來繞去,又回到了原點,*&a仍然等價於 a。

&*pa可以理解為&(*pa),*pa表示取得 pa 指向的數據(等價於 a),&(*pa)表示數據的地址(等價於 &a),所以&*pa等價於 pa。

對星號*的總結

在我們目前所學到的語法中,星號*主要有三種用途:

1、表示乘法,例如int a = 3, b = 5, c; c = a * b;,這是最容易理解的。

2、表示定義一個指針變數,以和普通變數區分開,例如int a = 100; int *p = &a;。

3、表示獲取指針指向的數據,是一種間接操作,例如int a, b, *p = &a; *p = 100; b = *p;。

⑸ C語言 指針

首先1:
這個就是一個立方運算嘛。我把你的代碼運行了一下,結果都是64,是不是你那個地方錯了,再仔細看看呀。代碼如下:
#include <iostream>
using namespace std;
float Get_X_2(float x)
{
return x*x*x;
}
int main()
{
int a=4;
float b=4;
cout<<Get_X_2(a)<<" 整型"<<endl;
cout<<Get_X_2(b)<<"單精度浮點型"<<endl;
return 0;
}
其次2:
int **p;// 這樣看:int *(*p), *P是指向整型的指針(p存放整型數的地址);*(*p)當然就是指向整型指針的指針(*p存放一個整型指針的地址)
*p=new int *[40]; //int *[40];表示一個整型指針數組,長度是40;它的地址放進*P里。
//可以將這句與*p=new int[40];對照一下。//這個語句是錯的,理由就是*p存放一個整型指針的地址
for (int i=0;i<40;i++)
p[i]=new int[60]; //應該理解為:為指針數組賦值,這個值來自 new int[60];或者說產生40個int[60];他們的地址放進指針數組。

⑹ C語言指針編程

代碼文本:

#include "stdio.h"

#define N 10

#define F(x) ((x)>0 ? (x) : -(x))

int f(int *p){

int i,mini;

for(mini=0,i=1;i<N;i++)

if(F(p[mini]) > F(p[i]))

mini=i;

printf("%d ",p[mini]);

return mini;

}

int main(int argc,char *argv[]){

int a[N],i;

printf("Enter the %d integers... ",N);

for(i=0;i<N;scanf("%d",a+i++));

printf("The subscript is %d ",f(a));

return 0;

}

⑺ 跪求高手 C語言中的指針原理及代碼

指針其實就是指向變數地址的變數(地址)。
代碼:
時鍾的代碼
#include
<time.h>
#include
<stdio.h>
int
main()
{
time_t
stime;
printf("%ld\n",time(
&stime
)
);
}//

⑻ c語言程序設指針

我寫了一個,已經調試通過,可以正確運行:
#include "stdio.h"
#include "string.h"
#define SIZE 200
void main()
{
int i;
int length;//字元串的長度變數
char sign[SIZE];
char s;
printf("請輸入一個字元串:\n");
scanf("%s",sign);//輸入一個字元串,sign數組名本身可以做地址
length=strlen(sign);//這是獲得字元串長度函數,文件頭要包含"string.h"
printf("字元串逆序輸出為:\n");
for(i=length;i>0;i--)
{s= sign[i-1];
printf("%c",s);//這是倒序輸出
}
}
PS:定義了一個SIZE為200的字元串,應該足夠接收輸入的字元。
祝樓主好運!如果有不明白的,可以一起交流···

⑼ 求C語言指針代碼

用指針法實現冒泡法排序的C語言程序如下

#include<stdio.h>

void bubblesort(int *a,int n){

int i,j,t;

for(i=0;i<n-1;i++){

for(j=0;j<n-1-i;j++){

if(*(a+j)<*(a+j+1)){

t=*(a+j);

*(a+j)=*(a+j+1);

*(a+j+1)=t;

}

}

}

}

int main(){

int i,a[]={32,98,51,28,12,38,57,43,115,21};

bubblesort(a,10);

for(i=0;i<10;i++){

printf("%d ",a[i]);

}

return 0;

}

⑽ C語言指針代碼問題

函數的聲明後面需要加分號 定義後面不能有分號 所以才會出現missing function header 的錯誤
將定義後面的分號去掉就可以了