typedef uint8_t A[3];
A *p;
Run Code Online (Sandbox Code Playgroud)
我无法理解这里的指针p究竟是什么?
A b;
Run Code Online (Sandbox Code Playgroud)
是
uint8_t b[3];
Run Code Online (Sandbox Code Playgroud)
也是
A *p;
Run Code Online (Sandbox Code Playgroud)
是
uint8_t (*p)[3];
Run Code Online (Sandbox Code Playgroud)
我的理解是否正确?
如果typedef碰巧只是替换typedef'ed令牌,那么如何做到这一点?谁能解释一下?
我有以下代码:
#include <inttypes.h>
#include <stdlib.h>
struct a
{
void *p;
};
int main(void)
{
struct a *ptr = malloc(sizeof(struct a));
ptr->p = malloc(sizeof(uint8_t));
*((uint8_t *) ptr->p) = 2;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我在解除引用之前转换void指针以避免警告
警告:解除引用'void*'指针
我是通过这样做打破任何规则还是这个代码好?
我正在偏移我的指针,如下面的代码所示,以复制到另一个结构.
#include <stdio.h>
struct a
{
int i;
};
struct test
{
struct a *p;
int x,y,z;
};
int main()
{
struct test *ptr = malloc(sizeof(struct test));
struct test *q = malloc(sizeof(struct test));
ptr->x = 10;
ptr->y = 20;
ptr->z = 30;
memcpy(&(q->x),&(ptr->x),sizeof(struct test)-sizeof(struct a*));
printf("%d %d %d\n",q->x,q->y,q->z);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来做我的memcpy()?我的问题是,如果我认识到结构的成员并想要移动我的指针sizeof(struct a*)并复制结构的其余部分,该怎么办?
编辑:
我想复制结构的某些部分,但我不知道其中的成员,但我知道我想跳过某些类型的变量,如示例中所示(struct a*)并复制结构的其余部分.
static uint32_t a[20] = {0};
Run Code Online (Sandbox Code Playgroud)
和
uint32_t a[20] = {0};
Run Code Online (Sandbox Code Playgroud)
我在代码中使用了它们
a[0] = 1;
Run Code Online (Sandbox Code Playgroud)
等等....
当我创建变量static并使用它时出现错误
variable "a" was declared but never referenced
Run Code Online (Sandbox Code Playgroud)
但当我删除时static一切正常。
在这两种情况下,数组a都是全局数组。
错误与 MACROS 有关。
数组声明已完成,并且由某些平台使用,我没有看到任何错误。相同的代码会产生错误,因为此声明/数组未在其他平台上使用。
我的错 !!!!
static uint32_t a[20] = {0};
void func()
{
...............
#ifdef ABC
a[0] = 1;
#endif
................
}
Run Code Online (Sandbox Code Playgroud)
现在在ABC平台上编译没有错误,在某些非ABC平台上编译时有错误。
解决方案:将全局也包裹在各自的宏下
#ifdef ABC
static uint32_t a[20] = {0};
#endif
Run Code Online (Sandbox Code Playgroud) 输入文件是这样的,它在第一行有一个字符串后跟一个整数,从第二行开始,它有一个字符串后跟2个整数.我的下面的代码运行良好,但有没有办法跳过字符串?我只是用一些字符数组char sink [30]扫描它.实际上我不需要这个值如何使用fscanf()来跳过这个字符串并只读取整数.
#include<stdio.h>
#include<stdlib.h>
int main()
{
int v,i=0,f=1;
static int *p,*q;
FILE *fp;
char sink[30];
fp = fopen("some.txt","r");
while(!feof(fp))
{
if(f)
{
fscanf(fp,"%s %d",sink,&v);
p = (int *)malloc(sizeof(int)*v);
q = (int *)malloc(sizeof(int)*v);
f=0;
}
else
{
fscanf(fp,"%s %d %d",sink,&p[i],&q[i]);
i++;
}
}
fclose(fp);
printf("The input vertices are\n");
for(i=0;i<v;i++)
printf("%d %d\n",p[i],q[i]);
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我似乎无法弄清楚为什么我的输出只有一倍.
#include<stdio.h>
#include<stdlib.h>
int my_isupper(int c);
int my_tolower(int c);
int
main(int argc,char *argv[]){
int c;
printf("Enter alphabet:");
scanf("%d",&c);
if ((c<='A' && c>='Z')||(c<='a' && c>='z')){
printf("Error: Please type a alphabet\n");
exit(EXIT_FAILURE);
}
if (my_isupper(c)==0){
printf("isnotupper");
}
else{
printf("is upper");
}
return 0;
}
int my_isupper(int c){
if(c>='A' && c<='Z'){
return 1;
}
else {
return 0;
}
}
Run Code Online (Sandbox Code Playgroud)
输出始终为"Isnotupper".可能是一个简单的错误.我是c编程的新手.如果您有关于调试的任何提示,请告诉我,以便我不会打扰任何人可以自我纠正的事情.谢谢!
#include <stdio.h>
int main(void) {
int a[5]={1,2,0,5,4},i,j,c;
for(i=0;i<5;i++)
{
for(j=0;j<5-i;j++){
if(a[j]>a[j+1])
{
c=a[j];
a[j]=a[j+1];
a[j+1]=c;
}
}
}
for(i=0;i<5;i++)
{
printf("%d",a[i]);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
ideone说"时限超过时间:5记忆:2048信号:24"
但它在turbo编译器上工作正常
我是编程新手,所以我使用的代码相当于我学到的东西.无论如何我正在开发一种场景,在这种场景中,用户输入两个选项中的一个,这两个选择将触发不同的代码集来执行,或者至少是我试图做的事情.然而,当我浏览我的代码时,它正在执行它,好像没有if语句所有内容都作为一个块运行.我很确定我的逻辑是正确的,如果有的话我的语法是不确定的.如果有什么可以做的话,你们可以做些什么来帮助解决我的问题,如果可能的话,我想学习而不仅仅是解决问题.感谢您的时间.
int main()
{
int move = 0, pstrength = 10, pdefense = 20, pintelligence = 40, php = 10, estrength = 30,
edefense = 40, eintelligence = 25, ehp = 10;
printf("Battle Start!\n\nYour HP: %d Enemy HP: %d\n\n1 - Attack\n2 - Magic\n\n", php, ehp);
float pap = (float)pstrength / (float)edefense * 5;
float pmp = (float)pintelligence / (float)eintelligence * 5, eap = (float)estrength /
(float)pdefense * 5;
do {
printf("Select your move: ");
Run Code Online (Sandbox Code Playgroud)
如果选择了动作1,/player将选择执行什么动作然后玩家攻击如果敌人没有跌到0马力,则敌人攻击然后循环重置并提示第二轮输入 /
scanf("%d", &move); …Run Code Online (Sandbox Code Playgroud) #include<stdio.h>
int main()
{
int i=5;
while(i--)
{
printf("%d\n",i);
};
printf("Out of loop\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这段代码工作正常!是否;在一个循环的结束并不意味着什么?所以,即使我们添加它,我们也没有任何问题?只是好奇!我认为;在循环结束时添加没有任何意义.
请参阅以下代码
#include <stdio.h>
#include<stdlib.h>
#define MALLOC(n) malloc(n)
int main(void) {
int *x = MALLOC (sizeof(int) * 10);
x[0] = 20;x[9] =200;
printf("%d %d\n",x[0],x[9]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我应该打电话给MALLOC(sizeof(int) * 10)对吗?由于宏应该与调用匹配.即使我打电话给MALLOC (sizeof(int) * 10)我得到相同的输出是这个未定义的行为?或者我错过了什么?
在后MALLOC一个调用之后的空格是否被忽略了?
标准说当我们调用一个宏时,它的确切文本表示被替换不是这里的情况吗?
我真的坚持使用C++中的高斯消除代码,我需要返回上三角矩阵但仍然只有我得到的是分段错误.我知道必须有一些分配的内存,但我找不到.
码:
#include <iostream>
using namespace std;
double ** allocateDynamicArray(int order){
double ** dynArray = new double *[order];
int cols = order+1;
double *pool = new double [order * cols];
for(int i = 0;i < order; i++, pool += cols){
dynArray[i] = pool;
}
return dynArray;
}
void deallocateDynamicArray(double **dynArray){
delete [] dynArray[0];
delete [] dynArray;
}
void addAndPrintArray(double **dynArray, int order){
cout << "Zadejte prvky pole radu " << order << endl;
for(int i=0; i< order; i++){
for(int j=0; …Run Code Online (Sandbox Code Playgroud) 在我的.h文件中,我有
extern int a[4];
Run Code Online (Sandbox Code Playgroud)
在我的.c文件中
int a[10];
Run Code Online (Sandbox Code Playgroud)
这有什么问题吗?
声明和定义大小很重要?不对?
如果我写入sizeof(a)其中一个文件,那么输出是什么?这是未定义的行为吗?
c ×11
bubble-sort ×1
c++ ×1
do-while ×1
gaussian ×1
if-statement ×1
malloc ×1
matrix ×1
pointers ×1
sorting ×1
user-input ×1