⑴ 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 的錯誤
將定義後面的分號去掉就可以了