当前位置:首页 » 编程语言 » 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 的错误
将定义后面的分号去掉就可以了